#ifndef GLOBAL_H
#define GLOBAL_H

#include <QFont>
#include <QColor>
#include <QVariant>
#include <QPixmap>

class Global
{
private:
    Global();
public:
    static Global &instance();

    ulong waterType() const;
    void setWaterType(ulong value);

    /******************** 文字水印 ********************/
    void initTextConfig();

    const QString &textContent() const;
    void setTextContent(const QString &value);

    const QFont &textFont() const;
    void setTextFont(const QFont &value);

    const QColor &textColor() const;
    void setTextColor(const QColor &value);

    int textOpacity() const;
    void setTextOpacity(int value);

    int textSlope() const;
    void setTextSlope(int value);

    int textDensity() const;
    void setTextDensity(int value);
    /*************************************************/

    /******************** 图片水印 ********************/
    void initImageConfig();

    const QPixmap &imagePixmap() const;
    void setImagePixmap(const QString &file);

    int imageOpacity() const;
    void setImageOpacity(int value);

    int imageSlope() const;
    void setImageSlope(int value);

    int imageScale() const;
    void setImageScale(int value);

    int imagePos() const;
    void setImagePos(int value);
    /*************************************************/

    /******************** 二维码水印 ********************/
    void initQrcoreConfig();

    const QString &qrContent() const;
    void setQrContent(const QString &value);

    const QColor &qrColor() const;
    void setQrColor(const QColor &value);

    int qrOpacity() const;
    void setQrOpacity(int value);

    int qrSlope() const;
    void setQrSlope(int value);

    int qrSize() const;
    void setQrSize(int value);

    int qrPos() const;
    void setQrPos(int value);
    /*************************************************/

    /******************** 暗水印 ********************/
    void initDarkConfig();

    const QString &darkContent() const;
    void setDarkContent(const QString &value);

    const QFont &darkFont() const;
    void setDarkFont(const QFont &value);

    const QColor &darkColor() const;
    void setDarkColor(const QColor &value);

    int darkOpacity() const;
    void setDarkOpacity(int value);

    int darkSlope() const;
    void setDarkSlope(int value);

    int darkDensity() const;
    void setDarkDensity(int value);
    /*************************************************/

    /******************** 点阵水印 ********************/
    void initMatrixConfig();

    const QString &matrixContent() const;
    void setMatrixContent(const QString &value);

    const QColor &matrixColor() const;
    void setMatrixColor(const QColor &value);

    int matrixDiam() const;
    void setMatrixDiam(int value);

    int matrixOpacity() const;
    void setMatrixOpacity(int value);

    int matrixLength() const;
    void setMatrixLength(int value);

    int matrixInterval() const;
    void setMatrixInterval(int value);

    uint32_t matrixCodeByString(const QString &s);
    /*************************************************/

private:
    void saveValue(const QString &key, const QVariant &value);

private:
    ulong m_waterType;          // 水印类型

    QString m_textContent;      // 文字水印内容
    QFont m_textFont;           // 文字水印字体
    QColor m_textColor;         // 文字水印颜色
    int m_textSlope;            // 文字水印倾斜度
    int m_textDensity;          // 文字水印密集度

    QPixmap m_imagePixmap;      // 图片水印
    int m_imageOpacity;         // 图片水印透明度
    int m_imageSlope;           // 图片水印倾斜度
    int m_imageScale;           // 图片水印缩放比
    int m_imagePos;             // 图片水印位置

    QString m_qrContent;        // 二维码水印内容
    QColor m_qrColor;           // 二维码水印颜色
    int m_qrSlope;              // 二维码水印倾斜度
    int m_qrSize;               // 二维码水印大小
    int m_qrPos;                // 二维码水印位置

    QString m_darkContent;      // 暗水印内容
    QFont m_darkFont;           // 暗水印字体
    QColor m_darkColor;         // 暗水印颜色
    int m_darkOpacity;          // 暗水印透明度
    int m_darkSlope;            // 暗水印倾斜度
    int m_darkDensity;          // 暗水印密集度

    QString m_matrixContent;    // 点阵水印内容
    QColor m_matrixColor;       // 点阵水印点颜色
    int m_matrixDiam;           // 点阵水印点直径
    int m_matrixLength;         // 点阵水印块边长
    int m_matrixInterval;       // 点阵水印块间距
    QMap<QString, uint32_t> m_matrixCodeMap;        // 点阵码表
};

#define GL Global::instance()


#endif // GLOBAL_H
